期权隐含波动率曲面计算方法文档
朱陈毓 2025.05.28
1 ETF期权隐含波动率计算步骤
1.1 计算 SyntheticYield:
对于每个 SeqStamp,重复步骤 1-5 :
- 使用 10sData 买1价与卖1价的平均价格,即中间价计算看涨期权
CallPrice,看跌期权PutPrice,ETF 价格ETFPrice:
对于CallPrice 和 PutPrice因为报价不全出现异常,如价格为0或者null,则不进入下一步的配对环节。
2. 对同一个到期日的看涨,看跌期权按照行权价 K 配对,得到 个配对
- 对每一个配对,计算看涨期权和看跌期权价格之差
C_minus_P:
-
依次选取出
C_minus_P绝对值最小对应的 4 个行权价 ,分别计算出对应的q_min1, q_min2, q_min3, q_min4,其中q的计算公式为: -
对4个
q_min1, q_min2, q_min3, q_min4取平均值得到SyntheticYield:
完成上述步骤可以得到不同ETF期权到期日对应的 SyntheticYield 时间序列,将它保存为二维DataFrame,其中列为期权的到期日
# SyntheticYield DataFrame例子
20250326 | 20250407 | 20250926 |
0.01 | 0.02 | 0.03 |
0.03 | 0.05 | 0.02 |
0.02 | 0.06 | 0.01 |
0.04 | 0.03 | 0.04 |
得到上述序列后,对每一列进行EWM处理,具体方法如下:
给出 half_life 参数为 ,根据公式
得到alpha,在给定原始yield序列为 ,可以得到处理后的序列 为:
仍然得到上述二维表格。当遇到异常情况, 为空值时, 延续 的值,最多延续6次,之后 设置为nan。如果没有到6次恢复,则延续有效 正常计算EWM。
保存
- 将
SyntheticYield保存为.csv文件,header 为str格式的期权到期日 - 将
SyntheticYield时间序列作为yield_rt,保存在VolSurfDataFrame 的yield_rt列中 ,注意每一行需要和VolSurf的expiration,以及SeqStamp一一对应
1.2 计算隐含波动率
对于每个 10s 切片:
- 使用
yield_rt和 ETF 的中间价ETFPrice,以及无风险利率R,期权的到期剩余时间Tenor,计算 ETF 的远期价格ETFForwardPrice:
- 使用看涨/看跌期权的价格
OptionPrice,以及无风险利率R,期权的到期剩余时间Tenor,计算看涨期权和看跌期权的远期价格OptionForwardPrice:
- 使用
py_IV_Solve_LBR.implied_volatility_from_a_transformed_rational_guess_with_limited_iterations函数,计算隐含波动率implied_volatility:
IVfun = py_IV_Solve_LBR.implied_volatility_from_a_transformed_rational_guess_with_limited_iterations
implied_volatility = IVfun(OptionForwardPrice, ETFForwardPrice, K, T, 0.0, type, 2)
对于看涨期权,type == 1,对于看跌期权,type == -1
将计算得到的隐含波动率保存在 VolSurf DataFrame 的 implied_vol_rt 列中。
2 实盘交易隐含波动率曲面参数计算步骤
实盘交易中,对每个10s切片的 DataFrame VolSurf,调用 VolatilitySurfaceModel.VolSurfFit_SVI_Realtime() 函数进行波动率曲面计算:
import VolatilitySurfaceModel as VS
VolSurfFit = VS.VolSurfFit_SVI_Realtime(VolSurf, SecStamp, MinPoints, nExp, Method, MinVolLevel, OptionPriceCutoff, InputTenor, MoneynessCutoff, yield_type)
该函数会返回 10s 切片时间点 SeqStamp 的 nExp 个到期日(从近到远)的隐含波动率曲面参数。对于中金所股指期权,该函数调用参数为:
MinPoints = 2
Method = 'CP'
MinVolLevel = 1e-4
OptionPriceCutoff = 0.29
InputTenor = 20.0
MoneynessCutoff = 0.075
yield_type = 'yield'
对于 ETF 期权,该函数调用参数为:
MinPoints=2,
Method='HP',
MinVolLevel=1e-4,
OptionPriceCutoff = 1.4e-4,
InputTenor = 40.0,
MoneynessCutoff = 0.05,
yield_type = 'yield_rt'